
import com.mysql.jdbc.Statement;
import java.sql.ResultSet;
import java.util.Vector;


public class OSDAO extends  Base{
    
    //<editor-fold defaultstate="collapsed" desc="Construtor">
    public OSDAO(){
        
    }
    //</editor-fold>
    
    //<editor-fold defaultstate="collapsed" desc="Métodos">
    /*
    * Método que monta a query e chama o buscarProximoID na classe Base.
    * e retorna pra classe ClinicaController o id ja incrementado, ClinicaController
    * só retorna para o frm_clinicas.
    */
    public int buscar_ProximoID(String id_tabela){
        conectarBanco();
        String sql;
        sql = "SELECT MAX("+id_tabela+") FROM tb_ordem_de_servico;";
        System.out.println(sql);
        return buscarProximoID(sql,id_tabela);
    }
    
    /*
     * Método para busca do id através do nome
     * de uma clinica passada por parametro.
     */
    public int buscarID_Paciente(String nome_paciente){
        conectarBanco();
        String sql;
        sql = "SELECT id_paciente FROM tb_paciente WHERE nome = '"+nome_paciente+"';";
        return buscarID(sql,"id_paciente");
    }
    /*
   * Método que monta a query para cadastro de clinicas
   */
    public boolean cadastrarOS(OS os) {
        conectarBanco();
        String sql;
        
        sql = "INSERT INTO tb_ordem_de_servico (id_paciente,cod_os,tipo_servico,servico,quantidade,data_entrada,data_entrega,"
                + "valor_unitario,valor_total,situacao_servico,situacao_pagamento,obs) values('"+os.getIDPaciente()+"','"+os.getCodOS()+"','"+os.getTipo_servico()+"','"+os.getServico()+"','"+os.getQuantidade()+"','"+os.getData_entrada()+"','"+os.getData_entrega()+"',"
                + "'"+os.getValor_unitario()+"','"+os.getValor_total()+"','"+os.getSituacao_servico()+"','"+os.getSituacao_pagamento()+"','"+os.getObs()+"');";
        System.out.println(sql);
        return cadastrar(sql);
    }
    /*
     * Método para busca o id de um registro na tabela
     * passando a linha por parametro.
     */
    public int buscarID_Tabelas(int linha,int coluna){
        conectarBanco();
        String id = frm_ordem_de_servico.jt_os.getValueAt(linha, coluna)+"";
        return Integer.parseInt(id);
    }
    /*
     * Método para editarDentista em seus campos.
     */
    public Vector<OS> editarOS(OS os){
        Vector<OS> vector = new Vector<OS>();
        Vector<OS> list = new Vector<OS>();
        String sql;
        try{
        conectarBanco();
            sql = "SELECT * FROM tb_ordem_de_servico WHERE id_os = "+os.getIDOs()+";";
        //   vector = buscarOS(sql);
            Statement st = (Statement) c.createStatement();
            ResultSet rs = st.executeQuery(sql);

            if (rs != null) {
                while (rs.next()) {
                    String data_entrada = (rs.getString("data_entrada"));
                    String dia = data_entrada.substring(8, 10);
                    String ano = data_entrada.substring(0, 4);
                    String mes = data_entrada.substring(5, 7);
                    data_entrada = (dia + "-" + mes + "-" + ano);

                    String data_entrega = (rs.getString("data_entrega"));
                    String dia_e = data_entrega.substring(8, 10);
                    String ano_e = data_entrega.substring(0, 4);
                    String mes_e = data_entrega.substring(5, 7);
                    data_entrega = (dia_e + "-" + mes_e + "-" + ano_e);

                    os.setIDOs(rs.getInt("id_os"));
                    os.setCodOS(rs.getInt("cod_os"));
                    os.setIDPaciente(rs.getInt("id_paciente"));
                    os.setNomePaciente(buscarNomePaciente(os.getIDPaciente()));
                    os.setData_entrada(data_entrada);
                    os.setData_entrega(data_entrega);
                    os.setObs(rs.getString("obs"));
                    os.setQuantidade(rs.getInt("quantidade"));
                    os.setServico(rs.getString("servico"));
                    os.setTipo_servico(rs.getString("tipo_servico"));
                    os.setSituacao_pagamento(rs.getString("situacao_pagamento"));
                    os.setSituacao_servico(rs.getString("situacao_servico"));
                    os.setValor_total(rs.getString("valor_total"));
                    os.setValor_unitario(rs.getString("valor_unitario"));

                    list.add(os);
                }
                return list;
            }
        } catch (Exception e) {
            System.out.println(e);
        }
        return null;
        
    }
    /*
     * Método que recebe o objeto os e monta a query para 
     * alteração dos campos.
     */
    public boolean alterarOS(OS os){
        conectarBanco();
        String sql;
        sql = "UPDATE tb_ordem_de_servico SET id_paciente = '"+os.getIDPaciente()+"',cod_os = '"+os.getCodOS()+"',tipo_servico='"+os.getTipo_servico()+"', servico ='"+os.getServico()+"', quantidade = '"+os.getQuantidade()+"', data_entrada='"+os.getData_entrada()+"', data_entrega='"+os.getData_entrega()+"', valor_unitario='"+os.getValor_unitario()+"', valor_total='"+os.getValor_total()+"',"
                    + "situacao_servico='"+os.getSituacao_servico()+"',situacao_pagamento='"+os.getSituacao_pagamento()+"',obs='"+os.getObs()+"' WHERE id_os = "+os.getIDOs()+";";
        
       return alterar(sql);
    }
    /*
     * Método que monta a query para cada tipo de pesquisa
     * de dentistas apartir do tipo de pesquisa e valor a serem pesquisados.    
     */
    public Vector<OS> buscarOS(String filtrar_por,String pesquisar){
        Vector<OS> list = new Vector<OS>();
        String sql;
        try{
            conectarBanco();
            if(filtrar_por.equals("Código")){
                sql = "SELECT * FROM tb_ordem_de_servico WHERE cod_os = '"+pesquisar+"';";
            }
            else if(filtrar_por.equals("Paciente")){
                sql = "SELECT * FROM tb_ordem_de_servico WHERE nome_paciente LIKE '%"+pesquisar+"%';";
            }
            else{
                sql = "SELECT * FROM tb_ordem_de_servico;";
            }

            Statement st = (Statement) c.createStatement();
            ResultSet rs = st.executeQuery(sql);

            if (rs != null) {
                while (rs.next()) {
                    OS os = new OS();
                    String data_entrada = (rs.getString("data_entrada"));
                    String dia = data_entrada.substring(8, 10);
                    String ano = data_entrada.substring(0, 4);
                    String mes = data_entrada.substring(5, 7);
                    data_entrada = (dia + "-" + mes + "-" + ano);

                    String data_entrega = (rs.getString("data_entrega"));
                    String dia_e = data_entrega.substring(8, 10);
                    String ano_e = data_entrega.substring(0, 4);
                    String mes_e = data_entrega.substring(5, 7);
                    data_entrega = (dia_e + "-" + mes_e + "-" + ano_e);

                    os.setIDOs(rs.getInt("id_os"));
                    os.setCodOS(rs.getInt("cod_os"));
                    os.setIDPaciente(rs.getInt("id_paciente"));
                    os.setNomePaciente(buscarNomePaciente(os.getIDPaciente()));
                    os.setData_entrada(data_entrada);
                    os.setData_entrega(data_entrega);
                    os.setObs(rs.getString("obs"));
                    os.setQuantidade(rs.getInt("quantidade"));
                    os.setServico(rs.getString("servico"));
                    os.setTipo_servico(rs.getString("tipo_servico"));
                    os.setSituacao_pagamento(rs.getString("situacao_pagamento"));
                    os.setSituacao_servico(rs.getString("situacao_servico"));
                    os.setValor_total(rs.getString("valor_total"));
                    os.setValor_unitario(rs.getString("valor_unitario"));

                    list.add(os);
                }
                return list;
            }
        } catch (Exception e) {
            System.out.println(e);
        }
        return null;
    } 
    
    public void listar_TipoServicosCombo(){
        conectarBanco();
        try {
            String sql;
            sql = "SELECT id_tipo_servico,nome_tipo_servico FROM tb_tipo_servico;";
            Statement st = (Statement) c.createStatement();
            ResultSet rs = st.executeQuery(sql);
            while (rs.next()) {
                ComboBox opt = new ComboBox(rs.getString("nome_tipo_servico"), rs.getInt("id_tipo_servico"));
                frm_ordem_de_servico.cb_tipo_servico.addItem(opt);
            }
        } catch (Exception e) {}
    }
    
    public void listar_ServicosCombo(int id_tipo_servico){
        conectarBanco();
        try {
            String sql;
            sql = "SELECT id_servico,nome_servico,valor FROM tb_servico WHERE id_tipo_servico = "+id_tipo_servico+";";
            Statement st = (Statement) c.createStatement();
            ResultSet rs = st.executeQuery(sql);
            while (rs.next()) {
                ComboBox opt = new ComboBox(rs.getString("nome_servico"), rs.getInt("id_servico"),rs.getString("valor"));
                frm_ordem_de_servico.cb_servico.addItem(opt);
            }
        } catch (Exception e) {}
    } 
    
    public String buscarNomePaciente(int id_paciente){
        String sql;
        sql= "select nome from tb_paciente where id_paciente = " + id_paciente + ";";
        return buscarNome(sql);
    }
    
    
    //</editor-fold>
}
